package cc.loac.heba.dao;

import cc.loac.heba.pojo.User;
import cc.loac.heba.pojo.UserRelation;
import org.apache.ibatis.annotations.Mapper;

import java.util.Date;
import java.util.List;

@Mapper
public interface UserDao {
    // 根据邮箱和密码返回 User
    User selectUserByEmailAndPassword(String email, String password);

    // 根据邮箱返回 User 数量
    int selectUserCountByEmail(String email);

    // 根据邮箱返回 User
    User selectUserByEmail(String email);

    // 新增用户
    int insertUser(String email, String username, String password, Date createTime);

    // 根据邮箱修改用户密码
    int updatePasswordByEmail(String email, String password);

    // 根据邮箱和时间修改用户最后登录时间
    void updateLastLoginTime(String email, Date date);

    // 更新用户简介
    int updateProfileByEmail(String email, String profile);

    // 根据邮箱和新头像地址更新头像
    void updateAvatarByEmailAndNewUrl(String email, String newAvatarUrl);

    // 根据用户邮箱将喜欢数量 + 1
    void updateLikesAdd(String email);

    // 根据用户邮箱将收藏数量 + 1
    void updateCollectionsAdd(String email);

    // 根据用户邮箱将喜欢数量 - 1
    void updateLikesMinus(String email);

    // 根据用户邮箱将收藏数量 - 1
    void updateCollectionsMinus(String email);

    // 更新用户资料
    void updateUser(String email, String username, String gender, String birth, String school);


    // 新增关注
    void insertFollow(String email, String followEmail, Date date);

    // 删除关注
    void deleteFollow(String email, String followEmail);

    // 获取所有关注
    List<UserRelation> selectFollow(String email);

    // 获取所有粉丝
    List<UserRelation> selectFan(String email);

    // 根据邮箱数组获取用户
    List<User> selectUserByEmails(List<String> emails);

    // 根据关注者邮箱和用户自己邮箱获取用户关系
    UserRelation selectRelationByEmailAndFollowEmail(String email, String followEmail);

    // 更新用户关注数量
    void updateUserFollowCount(String email, int count);

    // 获取用户关注数量
    int selectUserFollowCountByEmail(String email);

    // 更新用户粉丝数量
    void updateUserFanCount(String email, int count);

    // 获取用户粉丝数量
    int selectUserFanCountByEmail(String email);
}
